/**
 * @Description: vite配置文件
 * @Author: zhen
 * @Date: 2023-10-13
 */
import { defineConfig, ConfigEnv, UserConfig } from 'vite';
import { resolve } from 'path';
import vue from '@vitejs/plugin-vue';
import { visualizer } from 'rollup-plugin-visualizer';
import viteCompression from 'vite-plugin-compression';

// https://vitejs.dev/config/
export default defineConfig((config: ConfigEnv): UserConfig => {
  const isProd = config.mode === 'production';
  return {
    base: '/',
    resolve: {
      // 别名
      alias: {
        '@': resolve(__dirname, './src'),
        'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js'
      }
    },
    css: {
      // 指定传递给 CSS 预处理器的选项
      preprocessorOptions: {
        // sass公共变量
        scss: {
          additionalData: '@use "@/styles/var.scss" as *;'
        }
      }
    },
    server: {
      port: 3100,
      open: true,
      // 跨域代理配置 本地(dev)环境使用
      proxy: {
        '/api/v1': {
          target: 'http://127.0.0.1:3600/',
          changeOrigin: true
          // rewrite: path => path.replace(/^\/v1/, "")
        }
      }
    },
    plugins: [
      vue(),
      // * 是否生成包预览(分析依赖包大小,方便做优化处理)
      isProd && visualizer(),
      // * gzip 压缩
      isProd &&
        viteCompression({
          verbose: true,
          disable: false,
          threshold: 10240,
          algorithm: 'gzip',
          ext: '.gz'
        })
    ],
    // * 打包去除 console.log && debugger
    esbuild: {
      pure: isProd ? ['console.log', 'debugger'] : []
    },
    build: {
      outDir: 'dist',
      minify: 'esbuild',
      chunkSizeWarningLimit: 1500,
      rollupOptions: {
        output: {
          // 静态资源分类和打包
          chunkFileNames: 'static/js/[name]-[hash].js',
          entryFileNames: 'static/js/[name]-[hash].js',
          assetFileNames: 'static/[ext]/[name]-[hash].[ext]'
        }
      }
    }
  };
});
